#pragma once

namespace yazi
{
	namespace utility
	{
		template <typename T>
		class Singleton
		{
		public:
			static T* instance()	//三、共有的获取实例的静态方法
			{
				if (m_instance == NULL)
				{
					m_instance = new T();	//需要设置友元，因为T=A十，A是私有的
				}
				return m_instance;
			}

		private:
			Singleton() {}		//一、构造函数设为私有
			Singleton(const Singleton<T>&);	//禁用拷贝构造函数
			~Singleton() {}
			Singleton<T>& operator = (const Singleton<T>);	//禁用赋值构造函数
			

		private:
			static T* m_instance;	//二、私有的静态实例
		};

		template <typename T>
		T* Singleton<T>::m_instance = NULL;	//初始化
	}
}







